/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.qsoft.bean;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.apache.commons.lang3.StringUtils;
import org.qsoft.entity.Usuario;
import org.qsoft.entity.model.UsuarioFacade;
import org.qsoft.general.Utilidades;

/**
 *
 * @author AngelQuingaluisa
 */
/**
 * @ManagedBean <– marcara que este bean es un managed bean con el nombre
 * especifico que se indique en el atributo name. Y el atributo name no es
 * especificado, entonces el nombre predeterminado del managed bean name sera el
 * mismo que el nombre de la clase.
 *
 * @RequestScoped <– Establece el alcance ... aqui se defini un alcance del tipo
 * request, pero existen otros como session,view y aplication. Si el alcance no
 * es especificado, entonces el bean tendra una alcance por default de request
 *
 * La anotacion @ManagedBean tambien posee un atributo eager. Si eager=”true” y
 * el alcance (oseace el scope) es application, entonces el bean debe ser creado
 * cuando la aplicacion inicia y no durante la primera referencia que se haga
 * hacia el bean. En otras palabras, la creacion y almacenamiento de la
 * instancia del bean debera sucitarce antes de cualquier requests atendida.
 *
 * screen-shot-2011-09-08-at-100054-am.png
 *
 * Si eager esta establecida a true pero el alcance no es establecido a
 * application, entonces la inicializacion regular es “lazy” . Si eager no es
 * definida o falta, entonces la inicializacion regular “lazy” sera usada
 * tambien.
 *
 * Usando Managed Properties (o inicialisacion de las propiedas del bean)
 *
 * screen-shot-2011-09-08-at-100821-am.png
 *
 */
@ManagedBean(name = "accesoBean")
@RequestScoped
public class accesoBean {

    private String cedula;
    private String clave;
    private boolean popupmodal = false;
    private String texto;
    private String textoClave;
    @EJB
    private UsuarioFacade usuariojpa;

    //public accesoBean() {
    //this.usuariojpa = new UsuarioFacade();
    //}
    public String getTexto() {
        return texto;
    }

    public String getTextoClave() {
        return textoClave;
    }

    public void setTextoClave(String textoClave) {
        this.textoClave = textoClave;
    }

    public void setTexto(String texto) {
        this.texto = texto;
    }

    public boolean isPopupmodal() {
        return popupmodal;
    }

    public void setPopupmodal(boolean popupmodal) {
        this.popupmodal = popupmodal;
    }

    public String getCedula() {
        return cedula;
    }

    public void setCedula(String cedula) {
        this.cedula = cedula;
    }

    public String getClave() {
        return clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }

    public void claveMd5() {
        textoClave = Utilidades.md5(clave);
        
    }

    public String valida(ActionEvent event) {

        FacesContext context = FacesContext.getCurrentInstance();
        //si es nulo o no contiene nada la variable devuelve true
        claveMd5();
        if (StringUtils.isEmpty(getCedula())) {
            FacesMessage message = new FacesMessage();
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            message.setSummary("Cedula campo vacio");
            message.setDetail("Cedula campo vacio..");
            context.addMessage("form_acceso:txt_usuario", message);
            //this.txt_usuario.requestFocus();
            return "error";
        }
        if (StringUtils.isEmpty(getClave())) {
            FacesMessage message = new FacesMessage();
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            message.setSummary("Campo Clave");
            message.setDetail("Campo Clave vacio..");
            context.addMessage("form_acceso:txt_clave", message);
            //this.txt_clave.requestFocus();
            return "error";
        }
        Usuario usu = null;
        try {
            usu = this.usuariojpa.findUsuario(getCedula());
        } catch (Exception ex) {
          
            setTexto("Usuario no existe" + ex.getLocalizedMessage() + ex.getMessage());
            return "error";
        }
        if (usu == null) {
            setPopupmodal(true);
            setTexto("Usuario o Clave Incorrecta...");
            return "error";
        }
        if (!usu.getClave().equals(Utilidades.md5(getClave()))) {
            setPopupmodal(true);
            setTexto("Usuario o Clave Incorrecta...");
            return "error";
        }
        try {
            // Agregar la Variable de session del usuario logeado
            context.getExternalContext().getSessionMap().put("usu_login", usu);
            //No auditar el acceso se llena la tabla con datos 
            //AuditBakenBean.audit(AuditBakenBean.tipomensaje.ACCESAR, "El usuario Ingreso al sistema");
            // Enviar a la Pagina del Sistema
            context.getExternalContext().redirect(paginas.pagina_sistema);
        } catch (Exception ex) {
            Logger.getLogger(accesoBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "success";
    }
}
